import { request } from "../../request/index.js";
import regeneratorRuntime from '../../lib/runtime/runtime';
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 左侧的菜单数据
    leftMenuList: [],
    // 右侧的商品数据
    rightContent: [],
    // 被点击的左侧的菜单
    currentIndex: 0,
    scrollTop: 0
  },
  // 接口的返回数据
  Cates: [],

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    /*
    0 Web中的本地存储 和 小程序中的本地存储 的区别
      ① 写代码的方式不一样
        web: localStorage.setItem("key", "value");  localStorage.getItem("key");
        小程序中: wx.setStorageSync('key', "value");  wx.getStorageSync('key'); 
      ② 存的时候有没有做类型转换
        web: 不管存入的是什么类型的数据,最终都会先调用 toString() 把数据变成字符串 再存进去
        小程序: 不存在 类型转换 这个操作,存什么类型的数据进去,获取的时候就是什么类型的

    1 先判断一下本地存储中有没有旧的数据
      {time:Date.now(), data:[...]}
    2 没有旧数据就直接发送新请求
    3 有旧数据 同时旧的数据没有过期 就是用本地存储中的旧数据
    */

    // 1.获取本地存储中的数据(小程序中也存在本地存储技术)
    const Cates = wx.getStorageSync('cates');
    // 2.判断
    if (!Cates) {
      // 没有旧数据 发送请求获取数据
      this.getCaets();
    } else {
      // 有旧数据 定义过期时间
      if (Date.now() - Cates.time > 1000*10) {
        // 重新发送请求
        this.getCaets();
      } else {
        // 可以使用旧数据
        this.Cates = Cates.data;
        let leftMenuList = this.Cates.map(r => r.cat_name);
        let rightContent = this.Cates[0].children;
        this.setData({
          leftMenuList,
          rightContent
        })
      }
    }
  }, 

  // 获取分类数据
  async getCaets(){
    // request({
    //   url: "/categories"
    // })
    // .then(res => {
    //   this.Cates = res.data.message;

    //   // 把接口的数据存入到本地存储中
    //   wx.setStorageSync('cates', {time:Date.now(), data:this.Cates});

    //   // 构造左侧的大菜单数据
    //   let leftMenuList = this.Cates.map(r => r.cat_name);
    //   // 构造右侧的商品数据
    //   let rightContent = this.Cates[0].children;
    //   this.setData({
    //     leftMenuList,
    //     rightContent
    //   })
    // })

    //  1 使用es7的async await来发送请求
    const res = await request({url: "/categories"});
    this.Cates = res;

    // 把接口的数据存入到本地存储中
    wx.setStorageSync('cates', {time:Date.now(), data:this.Cates});

    // 构造左侧的大菜单数据
    let leftMenuList = this.Cates.map(r => r.cat_name);
    // 构造右侧的商品数据
    let rightContent = this.Cates[0].children;
    this.setData({
      leftMenuList,
      rightContent
    })
  },

  // 左侧菜单的点击事件
  handleItemTap(e) {
    /*
    1 获取被点击的标题身上的索引
    2 给data中的currentIndex赋值就可以了
    3 根据不同的索引来渲染右侧的商品内容
    */
   const {index} = e.currentTarget.dataset;

   let rightContent = this.Cates[index].children;
   this.setData({
    currentIndex: index,
     rightContent,
     // 重新设置 右侧内容的scroll-view标签距离顶部的距离
     scrollTop: 0
   })
  } 
})